package cate.game.play.config;

import cate.common.table.d.GD;
import cp.solution.util.str.Str;
import easy.java.dev.note.NoteClass;
import easy.java.dev.note.NoteField;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static cate.game.play.config.PlayCfgUtil.*;

@NoteClass("剧本配置参数")
public class PlayCfgArgs {

    @NoteField("解析后的配置数据")
    private Map<String, String> raw = new HashMap<>();

    public void setValue(String key,String value){
        raw.put(key, value);
    }

    public PlayCfgArgs() {
    }

    public PlayCfgArgs(String code){
        if (StringUtils.isNotBlank(code)) {
            String[] kvStrArr = code.split(FIELD_SEPARATOR);
            for (String kvStr : kvStrArr) {
                final String[] kvArr = kvStr.split(KV_SEPARATOR);
                if (kvArr.length >= 2) {
                    String k = kvArr[0];
                    String v = kvArr[1];
                    this.setValue(k, v);
                }
            }
        }
    }

    public String get(String key) {
        return raw.get(key);
    }

    public String getString(String key, String defaultValue) {
        String v = get(key);
        if (StringUtils.isBlank(v)) {
            return defaultValue;
        }
        return v;
    }

    public Integer getInt(String key) {
        return getInt(key, null);
    }

    public Integer getInt(String key, Integer defaultValue) {
        String v = get(key);
        return StringUtils.isBlank(v) ? defaultValue : Integer.valueOf(v);
    }

    public Long getLong(String key, Long defaultValue) {
        String v = get(key);
        return StringUtils.isBlank(v) ? defaultValue : Long.valueOf(v);
    }

    public Byte getByte(String key) {
        return getByte(key, null);
    }

    public Byte getByte(String key, Byte defaultValue) {
        String v = get(key);
        return StringUtils.isBlank(v) ? defaultValue : Byte.valueOf(v);
    }

    public Double getDouble(String key, Double defaultValue) {
        String v = get(key);
        return StringUtils.isBlank(v) ? defaultValue : Double.valueOf(v);
    }

    /**
     * 获取万分比数值（转换成小数）
     * @param key
     * @param defaultValue
     * @return
     */
    public Double getWDouble(String key, Double defaultValue) {
        return getDouble(key,defaultValue)/ GD.W_10000_0;
    }

    public Boolean getBoolean(String key){
        return getBoolean(key,null);
    }

    public Boolean getBoolean(String key, Boolean defaultValue) {
        String v = get(key);
        if(StringUtils.isBlank(v)) {
            return defaultValue;
        } else {
            if("1".equals(v)) {
                return true;
            }
            return Boolean.valueOf(v);
        }
    }


    public List<Byte> getByteList(String key) {
        String v = get(key);
        if (v == null) {
            return null;
        }
        return Str.strArr2byteList(v.split(LIST_SEPARATOR));
    }

    public List<Integer> getIntList(String key) {
        String v = get(key);
        if (v == null) {
            return null;
        }
        return Str.strArr2intList(v.split(LIST_SEPARATOR));
    }

    public List<String> getStrList(String key) {
        String v = get(key);
        if (v == null) {
            return null;
        }
        return Str.strArr2strList(v.split(LIST_SEPARATOR));
    }
}